#!/usr/bin/python
#from importlib.resources import path
#from genericpath import isdir
from hashlib import new
import os
import os.path
import datetime
from stat import *
from optparse import OptionParser
import json
import sys
#from engine.file_scanner import main_thread
from s2c.engine.system_info import SystemInfo
from s2c.engine.process_scanner import ProcessScanner
from s2c.engine.downloader import Downloader
from s2c.engine.docker_file import DockerFile
from s2c.engine.db_helper import DbHelper
from s2c.tools.utils import get_json_file,read_file
from s2c.rules.conf import DB_NAME

#获取当前系统进程，并过滤掉系统进程并写入数据库
""" def process_data():
	# 找到当前系统启动的进程信息
	pro = ProcessScanner()
	pro.psutil_lib_all()
	db = DbHelper()
	new_arr = []
	print('-----------', pro.data)
	for item in pro.data:
		new = db.check_db_system_pro_table(item)
		if new:
			new_arr.append(item)
	print('\n---------扫描的新进程信息---------\n')
	for item in new_arr:
		print(item['user'] + '	' + item['name'])
	return new_arr """

# 判断当前系统字典是否已经存在
def check_dict_status():
	sys_info = SystemInfo() #依赖系统信息

	# 检查文件是否存在
	if os.path.exists(sys_info.file_name()) == False:
		return False
	# 检查进程文件是否存在
	if os.path.exists(sys_info.process_name()) == False:
		return False
	# 检查进程文件是否存在
	if os.path.exists(sys_info.target_system_file_name()) == False:
		return False
	
	return True

# 更新系统信息获取系统文件并写入数据库
def download_file_write_db():
	#下载进程和系统系统文件指纹
	down = Downloader()
	down.all()
	# 下载完成后更新到数据库中
	sys_info = SystemInfo() #依赖系统信息
	#解析系统JSON文件
	sys_arr = get_json_file(sys_info.file_name())
	# 导入之前先删除之前的数据库文件
	if os.path.exists(DB_NAME):
		os.remove(DB_NAME)

	db = DbHelper()
	if sys_arr['list'] :
		arr_list = []
		for list in sys_arr['list'] :
			arr_list.append((list['name'], list['path'], list['desc'], list['md5'], list['type']))
		#print('================len======', len(arr_list))
		db.create_system_file_table()
		db.insert_system_file_table(arr_list)
	#解析系统进程JSON文件
	pro_arr = get_json_file(sys_info.process_name())
	if pro_arr['list'] :
		arr_list = []
		for list in pro_arr['list'] :
			arr_list.append((list['user'], list['name'], list['type']))
		#print('================len======', len(arr_list))
		db.create_system_pro_table()
		db.insert_system_pro_table(arr_list)

	#解析openeuler系统JSON文件
	pro_arr = get_json_file(sys_info.target_system_file_name())
	if pro_arr['list'] :
		arr_list = []
		for list in pro_arr['list'] :
			arr_list.append((list['name'], list['path'], list['desc'], list['md5'], list['type']))
		#print('================len======', len(arr_list))
		db.create_system_openeuler_table()
		db.insert_system_openeuler_table(arr_list)

# 扫描当前系统文件并更新到数据库中
def scanner_file(path):
	# 先扫描系统文件
	#main_thread(path)
	# 在更新系统文件
	sys_info = SystemInfo() #依赖系统信息
	#解析系统JSON文件
	#print('----sys_info.file_name----------', sys_info.file_name())
	sys_arr = get_json_file(sys_info.file_name())
	new_arr = []
	db = DbHelper()
	if sys_arr['list'] :
		for item in sys_arr['list'] :
			if db.check_db_syste_file(item):
				new_arr.append(item)

	print('新增加文件数量:', len(new_arr))
	db_index = read_file('dbtmp')
	db.update_db_scan_file_status(db_index, {
		'new_count': len(new_arr),
		'status': 100 # 计算文件已经结束
	})
	return new_arr

# 获取init数据
""" def init_info(data):
	# 生成default 系统文件
	print('---------init--------------', data)
	main_thread(data)
	# 生成default进程文件
	pro = ProcessScanner()
	pro.psutil_lib_all()
	pro.save() """

def get_info():
	print('\n---------获取系统信息---------')
	sys = SystemInfo()
	# 先获取当前系统default 信息，并生成文件名称
	# 定义文件名称
	sys_info = sys.getObj()
	#print(sys_info)
	print('\n')
	print('name: ' + sys_info['name'])
	print('arch: ' + sys_info['arch'])
	print('ver: ' + sys_info['ver'])
	print('sdk: ' + sys_info['sdk'])
	print('create time: ' + sys_info['create_time'] + '\n')
	print('\n---------获取系统信息---------\n')
	return sys_info

def get_docker_file(name):
	docker =  DockerFile(name)
	docker.create_docker_file()
	return docker.file_arr

if __name__ == "__main__":
	print('===============start=================')

